www.gusucode.com > VC++ 代码实现绘制生成一个五角星-源码程序 > VC++ 代码实现绘制生成一个五角星-源码程序/code/Pentacle.cpp
//Download by http://www.NewXing.com // Pentacle.cpp: implementation of the CPentacle class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Five.h" #include "Pentacle.h" #include <math.h> #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CPentacle::CPentacle() { m_lColor = RGB(255, 0, 0); // 初始化颜色为红色 m_lWidth = 0; m_lHigh = 0; } CPentacle::~CPentacle() { } ////////////////////////////////////////////////////////////////////// // 计算五角星的各个顶点 // DWORD lHigh 绘画区域的高 // DWORD lWidth 绘画区域的宽 // 返回是否创建点成功 ////////////////////////////////////////////////////////////////////// bool CPentacle::CalculateFivePoint(DWORD lWidth, DWORD lHigh) { m_vPointList.clear(); // 清空点列表 m_lHigh = lHigh; m_lWidth = lWidth; double dAngle = 90; // 角度, 初始化为正上方 for ( int i = 0; i < 5; i++) { CPoint point; point.x = lWidth/2.0 * ( 1 + cos( dAngle / 180 * PI ) ); point.y = lHigh/2.0 * ( 1 - sin( dAngle / 180 * PI ) ); m_vPointList.push_back(point); // 计算下一个点 dAngle += 360 / 5 * 2; // 如果不*2,那么结果是一个五边形,不是五角星 if ( dAngle > 360 ) { dAngle -= 360; } } return true; } ////////////////////////////////////////////////////////////////////// // 计算其他多边形顶点位置,点顺序 // DWORD lHigh 绘画区域的高 // DWORD lWidth 绘画区域的宽 // int iNumber 创建点的数量,不可以小于3个点 // 返回是否创建点成功 ////////////////////////////////////////////////////////////////////// bool CPentacle::CalculatePoint(DWORD lWidth, DWORD lHigh, int iNumber) { m_vPointList.clear(); // 清空点列表 m_lHigh = lHigh; m_lWidth = lWidth; double dAngle = 90; // 角度, 初始化为正上方 for ( int i = 0; i < iNumber; i++) { CPoint point; point.x = lWidth/2.0 * ( 1 + cos( dAngle / 180 * PI ) ); point.y = lHigh/2.0 * ( 1 - sin( dAngle / 180 * PI ) ); m_vPointList.push_back(point); // 计算下一个点 dAngle += 360 / iNumber; if ( dAngle > 360 ) { dAngle -= 360; } } return true; return true; } ////////////////////////////////////////////////////////////////////// // 绘制图形 // CDC* pDC 绘制图形的设备句柄 // 返回绘制是否成功 ////////////////////////////////////////////////////////////////////// bool CPentacle::Draw(CDC* pDC) { // 创建点的列表 int lNum = m_vPointList.size(); CPoint* pList = new CPoint[lNum]; for ( int i = 0; i < lNum; i++ ) { pList[i] = m_vPointList[i]; } // 创建多边形区域 CRgn Rgn; Rgn.CreatePolygonRgn(pList, lNum, WINDING); pDC->SelectObject(&Rgn); // 创建画刷 CBrush brush; brush.CreateSolidBrush(m_lColor); CBrush* pOldBrush = pDC->SelectObject(&brush); // 创建画笔 CPen pen; pen.CreatePen(PS_SOLID, 1, m_lColor); CPen* pOldPen = pDC->SelectObject(&pen); pDC->Ellipse(0, 0, m_lWidth, m_lHigh); pen.DeleteObject(); pDC->SelectObject(pOldPen); brush.DeleteObject(); pDC->SelectObject(pOldBrush); Rgn.DeleteObject(); if ( NULL != pList ) { delete [] pList; pList = NULL; } return true; }